package com.swak.job.storage;

import java.util.Date;
import java.util.List;

import com.swak.job.Job;
import com.swak.job.JobDispatch;
import com.swak.job.JobTask;
import com.swak.job.timer.TimerTask.TaskFrag;

/**
 * 任务存储
 * 
 * @author lifeng
 * @date 2021年2月25日 下午1:10:30
 */
public interface StorageService {

	/**
	 * 初始化任务
	 * 
	 * @param job
	 */
	void create(Job job);

	/**
	 * 调度任务：需要在事务中或者锁中执行
	 * 
	 * @param job
	 */
	boolean dispatch(JobDispatch dispatch, TaskFrag frag);

	/**
	 * 发布一个任务
	 * 
	 * @param job
	 * @param frag
	 * @return
	 */
	void createTask(JobTask task);

	/**
	 * 发布一个任务
	 * 
	 * @param job
	 * @param frag
	 * @return
	 */
	void dispatchTask(JobTask task);

	/**
	 * 执行一个任务
	 * 
	 * @param job
	 * @param frag
	 * @return
	 */
	void execute(JobTask task);

	/**
	 * 查询执行失败的任务
	 * 
	 * @param tops
	 * @return
	 */
	List<JobTask> queryFailTasks(Date delayDate);
}